package com.zhenmaitang.clinic_sys.service;

import com.zhenmaitang.clinic_sys.entity.SysMenu;

import java.util.List;
import java.util.TreeSet;

/**
 * 菜单服务接口
 */
public interface MenuService {

    /**
     * 获取所有菜单
     */
    List<SysMenu> getAllMenus();

    /**
     * 根据ID获取菜单
     */
    SysMenu getMenuById(Integer id);

    /**
     * 根据权限编码获取菜单
     */
    SysMenu getMenuByPermissionCode(String permissionCode);

    /**
     * 获取菜单树结构
     */
    TreeSet<SysMenu> getMenuTree();

    /**
     * 获取用户的菜单权限
     */
    TreeSet<SysMenu> getUserMenus(Integer userId);

    /**
     * 获取角色的菜单权限
     */
    List<SysMenu> getRoleMenus(List<String> roleNames);

    /**
     * 创建菜单
     */
    SysMenu createMenu(SysMenu menu);

    /**
     * 更新菜单
     */
    SysMenu updateMenu(SysMenu menu);

    /**
     * 删除菜单
     */
    void deleteMenu(Integer id);

    /**
     * 为角色分配菜单权限
     */
    void assignMenusToRole(Integer roleId, List<Integer> menuIds);

    /**
     * 获取角色的菜单ID列表
     */
    List<Integer> getRoleMenuIds(Integer roleId);

    /**
     * 检查用户是否有菜单权限
     */
    boolean hasMenuPermission(Integer userId, String permissionCode);

    /**
     * 获取父菜单列表
     */
    List<SysMenu> getParentMenus();

    /**
     * 获取子菜单列表
     */
    List<SysMenu> getChildrenByParentId(Integer parentId);
}